Analysis and visualisation of spatial transcriptomics data. Generally followed this Seurat workflow.
Load libraries
library(UCell)
Loading required package: data.table
data.table 1.14.8 using 12 threads (see ?getDTthreads). Latest news: r-datatable.com
Attaching package: ‘data.table’
The following objects are masked from ‘package:dplyr’:
between, first, last
Loading required package: Matrix
Load merged liver slices and set identity
sobj <- readRDS("../spatial/merged_spatial_sobj.RDS")
Idents(sobj) <- "SCT_snn_res.0.2"
Visualise clusters on spatial plot
plot1 <- SpatialDimPlot(sobj, alpha = 0.7, images = 'slice1') & NoLegend()
plot2 <- SpatialDimPlot(sobj, alpha = 0.7, images = 'slice1.1') +
labs(fill = "Cluster")
plot1 + plot2
pdf("./figures/spatial/merged_dimPlot_UMAP.pdf")
plot1 + plot2
dev.off()
png
2
Visualise features on spatial plot
Calculate markers
all.markers <- FindAllMarkers(sobj, only.pos = TRUE,
min.pct = 0.25,
logfc.threshold = 0.25,
recorrect_umi = FALSE)
Calculating cluster 0
| | 0 % ~calculating
|+++ | 4 % ~00s
|+++++ | 9 % ~00s
|+++++++ | 13% ~00s
|+++++++++ | 17% ~00s
|+++++++++++ | 22% ~00s
|++++++++++++++ | 26% ~00s
|++++++++++++++++ | 30% ~00s
|++++++++++++++++++ | 35% ~00s
|++++++++++++++++++++ | 39% ~00s
|++++++++++++++++++++++ | 43% ~00s
|++++++++++++++++++++++++ | 48% ~00s
|+++++++++++++++++++++++++++ | 52% ~00s
|+++++++++++++++++++++++++++++ | 57% ~00s
|+++++++++++++++++++++++++++++++ | 61% ~00s
|+++++++++++++++++++++++++++++++++ | 65% ~00s
|+++++++++++++++++++++++++++++++++++ | 70% ~00s
|+++++++++++++++++++++++++++++++++++++ | 74% ~00s
|++++++++++++++++++++++++++++++++++++++++ | 78% ~00s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~00s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s
Calculating cluster 1
| | 0 % ~calculating
|+++ | 4 % ~00s
|+++++ | 8 % ~00s
|+++++++ | 12% ~00s
|+++++++++ | 17% ~00s
|+++++++++++ | 21% ~00s
|+++++++++++++ | 25% ~00s
|+++++++++++++++ | 29% ~00s
|+++++++++++++++++ | 33% ~00s
|+++++++++++++++++++ | 38% ~00s
|+++++++++++++++++++++ | 42% ~00s
|+++++++++++++++++++++++ | 46% ~00s
|+++++++++++++++++++++++++ | 50% ~00s
|++++++++++++++++++++++++++++ | 54% ~00s
|++++++++++++++++++++++++++++++ | 58% ~00s
|++++++++++++++++++++++++++++++++ | 62% ~00s
|++++++++++++++++++++++++++++++++++ | 67% ~00s
|++++++++++++++++++++++++++++++++++++ | 71% ~00s
|++++++++++++++++++++++++++++++++++++++ | 75% ~00s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~00s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~00s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s
Calculating cluster 2
| | 0 % ~calculating
|++ | 3 % ~00s
|++++ | 6 % ~00s
|+++++ | 10% ~00s
|+++++++ | 13% ~00s
|+++++++++ | 16% ~00s
|++++++++++ | 19% ~00s
|++++++++++++ | 23% ~00s
|+++++++++++++ | 26% ~00s
|+++++++++++++++ | 29% ~00s
|+++++++++++++++++ | 32% ~00s
|++++++++++++++++++ | 35% ~00s
|++++++++++++++++++++ | 39% ~00s
|+++++++++++++++++++++ | 42% ~00s
|+++++++++++++++++++++++ | 45% ~00s
|+++++++++++++++++++++++++ | 48% ~00s
|++++++++++++++++++++++++++ | 52% ~00s
|++++++++++++++++++++++++++++ | 55% ~00s
|++++++++++++++++++++++++++++++ | 58% ~00s
|+++++++++++++++++++++++++++++++ | 61% ~00s
|+++++++++++++++++++++++++++++++++ | 65% ~00s
|++++++++++++++++++++++++++++++++++ | 68% ~00s
|++++++++++++++++++++++++++++++++++++ | 71% ~00s
|++++++++++++++++++++++++++++++++++++++ | 74% ~00s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~00s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~00s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~00s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++ | 90% ~00s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~00s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s
Calculating cluster 3
| | 0 % ~calculating
|+++ | 5 % ~00s
|+++++ | 9 % ~00s
|+++++++ | 14% ~00s
|++++++++++ | 18% ~00s
|++++++++++++ | 23% ~00s
|++++++++++++++ | 27% ~00s
|++++++++++++++++ | 32% ~00s
|+++++++++++++++++++ | 36% ~00s
|+++++++++++++++++++++ | 41% ~00s
|+++++++++++++++++++++++ | 45% ~00s
|+++++++++++++++++++++++++ | 50% ~00s
|++++++++++++++++++++++++++++ | 55% ~00s
|++++++++++++++++++++++++++++++ | 59% ~00s
|++++++++++++++++++++++++++++++++ | 64% ~00s
|+++++++++++++++++++++++++++++++++++ | 68% ~00s
|+++++++++++++++++++++++++++++++++++++ | 73% ~00s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~00s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~00s
|++++++++++++++++++++++++++++++++++++++++++++ | 86% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s
Calculating cluster 4
| | 0 % ~calculating
|+ | 1 % ~01s
|++ | 3 % ~01s
|+++ | 4 % ~01s
|+++ | 5 % ~01s
|++++ | 7 % ~01s
|+++++ | 8 % ~01s
|+++++ | 10% ~01s
|++++++ | 11% ~01s
|+++++++ | 12% ~01s
|+++++++ | 14% ~01s
|++++++++ | 15% ~01s
|+++++++++ | 16% ~01s
|+++++++++ | 18% ~01s
|++++++++++ | 19% ~01s
|+++++++++++ | 21% ~01s
|+++++++++++ | 22% ~00s
|++++++++++++ | 23% ~00s
|+++++++++++++ | 25% ~00s
|++++++++++++++ | 26% ~00s
|++++++++++++++ | 27% ~00s
|+++++++++++++++ | 29% ~00s
|++++++++++++++++ | 30% ~00s
|++++++++++++++++ | 32% ~00s
|+++++++++++++++++ | 33% ~00s
|++++++++++++++++++ | 34% ~00s
|++++++++++++++++++ | 36% ~00s
|+++++++++++++++++++ | 37% ~00s
|++++++++++++++++++++ | 38% ~00s
|++++++++++++++++++++ | 40% ~00s
|+++++++++++++++++++++ | 41% ~00s
|++++++++++++++++++++++ | 42% ~00s
|++++++++++++++++++++++ | 44% ~00s
|+++++++++++++++++++++++ | 45% ~00s
|++++++++++++++++++++++++ | 47% ~00s
|++++++++++++++++++++++++ | 48% ~00s
|+++++++++++++++++++++++++ | 49% ~00s
|++++++++++++++++++++++++++ | 51% ~00s
|+++++++++++++++++++++++++++ | 52% ~00s
|+++++++++++++++++++++++++++ | 53% ~00s
|++++++++++++++++++++++++++++ | 55% ~00s
|+++++++++++++++++++++++++++++ | 56% ~00s
|+++++++++++++++++++++++++++++ | 58% ~00s
|++++++++++++++++++++++++++++++ | 59% ~00s
|+++++++++++++++++++++++++++++++ | 60% ~00s
|+++++++++++++++++++++++++++++++ | 62% ~00s
|++++++++++++++++++++++++++++++++ | 63% ~00s
|+++++++++++++++++++++++++++++++++ | 64% ~00s
|+++++++++++++++++++++++++++++++++ | 66% ~00s
|++++++++++++++++++++++++++++++++++ | 67% ~00s
|+++++++++++++++++++++++++++++++++++ | 68% ~00s
|+++++++++++++++++++++++++++++++++++ | 70% ~00s
|++++++++++++++++++++++++++++++++++++ | 71% ~00s
|+++++++++++++++++++++++++++++++++++++ | 73% ~00s
|+++++++++++++++++++++++++++++++++++++ | 74% ~00s
|++++++++++++++++++++++++++++++++++++++ | 75% ~00s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~00s
|++++++++++++++++++++++++++++++++++++++++ | 78% ~00s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~00s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~00s
|++++++++++++++++++++++++++++++++++++++++++ | 82% ~00s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~00s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~00s
|++++++++++++++++++++++++++++++++++++++++++++ | 86% ~00s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~00s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++ | 90% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~00s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~00s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=01s
Create zonation scores using top 30 genes from periportal and pericentral clusters (like Tallulah’s paper)
cv_genes
[1] "FETUB" "HMGCS1" "CYP2E1" "GLUD1;GLUD2" "CYP1A2" "RGN" "INMT"
[8] "COMT" "FDPS" "SPR-1"
Format for UCell
mySigs <- list()
mySigs$Periportal <- pp_genes
mySigs$Pericentral <- cv_genes
mySigs
$Periportal
[1] "Saa2;Saa1-1" "HAMP" "APOA1"
[4] "APOC2" "CRYL1" "AMY1A;AMY1C;AMY1B;AMY2A;AMY2B"
[7] "MT-ATP6" "UROC1" "APOA2"
[10] "MT-CO3"
$Pericentral
[1] "FETUB" "HMGCS1" "CYP2E1" "GLUD1;GLUD2" "CYP1A2" "RGN" "INMT"
[8] "COMT" "FDPS" "SPR-1"
Add these as gene signatures
sobj <- AddModuleScore_UCell(sobj, features = mySigs, assay = "SCT")
signature.names <- paste0(names(mySigs), "_UCell")
VlnPlot(sobj, features = signature.names, group.by = "SCT_snn_res.0.2")
SpatialFeaturePlot(sobj,
features = signature.names,
images = 'slice1')
SpatialFeaturePlot(sobj,
features = signature.names,
images = 'slice1.1')
Create figures of spatial plots with signatures
plot1 <- SpatialFeaturePlot(sobj,
features = "Periportal_UCell",
images = 'slice1')
plot2 <- SpatialFeaturePlot(sobj,
features = "Periportal_UCell",
images = 'slice1.1')
pdf("./figures/spatial/periportalSig_spatial_UCell.pdf")
plot1 + plot2
dev.off()
null device
1
plot1 <- SpatialFeaturePlot(sobj,
features = "Pericentral_UCell",
images = 'slice1')
plot2 <- SpatialFeaturePlot(sobj,
features = "Pericentral_UCell",
images = 'slice1.1')
pdf("./figures/spatial/pericentralSig_spatial_UCell.pdf")
plot1 + plot2
dev.off()
null device
1
Create heatmap with signature genes
plot <- DoHeatmap(sobj,
features = c(pp_genes, cv_genes),
angle = 0,
size = 3)
plot
pdf("./figures/spatial/zoneSigs_byClust_heatmap.pdf")
plot
dev.off()
png
2